﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AdmLaboratorios.DTO;
using AdmLaboratorios.Business;
using AdmLaboratorios.Business.Entities;
using AdmLaboratorios.VB;

namespace AdmLaboratorios
{
    public partial class frmMDI : Form
    {
        public frmMDI()
        {
            InitializeComponent();
        }

        private void frmMDI_Load(object sender, EventArgs e)
        {
            
            FormsFactory.MDI = this;

            try
            {
                FormsHelper.cWait();

                //Titulo del MDI.           
                this.Text = string.Format("Administración de Laboratorios - v{0}.{1}.{2}"
                    , System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.Major
                    , System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.Minor
                    , System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.Build);

                MDIHelper h = new MDIHelper(this, this.tblVentanas);

                //Activa o Desactiva Menues segun el perfil de usuario.
                InicializarMenues();
                
                //Activo el Vencimiento automatico de stock.
                Stock.EjecutarVencimientos();
                lblCtrlVto.Text = DateTime.Now.ToString();
                tmrVencimiento.Enabled = true;


                ////Inicializo las opciones de Opciones.xml.
                //mnuRecordarConfiguracionDeLasGrillas.Checked = true; // Parametros.RecordarConfiguracionGrillas;
                //_BarraVentanas.UsaConfigGrillas = true; // Parametros.RecordarConfiguracionGrillas;
                //mnuMaximizarAutomaticamenteLasVentanas.Checked = true; // Parametros.AgrandarAutomaticamenteVentanas;
                //ff.UsaVentanasMaximizadas = true; // Parametros.AgrandarAutomaticamenteVentanas;
                //mnuEvitarMaximizadoAutomatico.Checked = true; // Parametros.EvitarMaximizadoAutomatico;
                //ff.EvitaMaximizadoAutomatico = true; // Parametros.EvitarMaximizadoAutomatico;
            }
            catch (Exception ex)
            {
                FormsHelper.MsgErrorInesperado(ex);
            }
            finally
            {
                FormsHelper.cDefault();
            }
        }

        public void InicializarMenues()
        {
            List<PermisoDTO> permisos = BusinessHelper.Usuario.Permisos;

            foreach (NetBarControl.NetBarGroup grupo in barControl.Groups)
            {
                grupo.Enabled = BusinessHelper.Usuario.EsAdministrador || BusinessHelper.Usuario.TienePermiso(grupo.Name);

                foreach (NetBarControl.NetBarItem item in grupo.Items)
                {
                    item.Enabled = BusinessHelper.Usuario.EsAdministrador || BusinessHelper.Usuario.TienePermiso(item.Name);
                }
            }
        }

        private void frmMDI_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }

        private void frmMDI_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.UserClosing)
            {
                if (MessageBox.Show("¿Está seguro de que desea cerrar la aplicación?", "Cerrar Sistema...", 
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                    e.Cancel = true;
            }
        }

        internal void SetUser(UsuarioDTO usuario)
        {
            BusinessHelper.Usuario = new Usuario(usuario);
            BusinessHelper.SetUserName(usuario.Usuario);

            lblUsuario.Text = usuario.Usuario;
            
            mnuPerfiles.DropDownItems.Clear();
            foreach (PerfilDTO perfil in BusinessHelper.Usuario.Perfiles)
                mnuPerfiles.DropDownItems.Add(perfil.Nombre);
        }

        private void bUsuarios_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmUsuarios>();
        }

        private void bPerfiles_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmPerfiles>();
        }

        private void bPermisos_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmPermisos>();
        }

        //private void bClienteProveedor_ItemClick(object sender, EventArgs e)
        //{
        //    FormsFactory.ShowForm<frmClienteProveedor>();
        //}

        private void BPartner_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmPartner>();
        }

        private void bOPAlta_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmOPAlta>();
        }

        private void bOPConsulta_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmOPConsulta>();
        }

        private void bIRAlta_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmIRAlta>();
        }

        private void bIRConsulta_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmIRConsulta>();
        }

        private void bProductos_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmAsignacionProductos>();
        }

        private void bIRSinAprobar_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmIRSinAprobar>();
        }

        private void bIRSinOP_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmIRSinOP>();
        }

        private void bProductosMaestro_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmProductoMaestro>();
        }

        private void bStockConsulta_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmStockConsulta>();
        }

        private void bValeConsumo_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmValeConsumo>();
            //var f = FormsFactory.GetForm<frmValeConsumo>(); //.ShowForm<frmValeConsumo>();
            //f.Tipo = eValeTipo.CONSUMO;
            //FormsFactory.PrepararForm(f, this);
            //f.cbTipoIngreso.SelectedIndex = 0;
        }

        private void bValeDevolucion_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmValeDevolucion>();
            //var f = FormsFactory.GetForm<frmValeConsumo>(); //.ShowForm<frmValeConsumo>();
            //f.Tipo = eValeTipo.DEVOLUCION;
            //FormsFactory.PrepararForm(f, this);
            //f.cbTipoIngreso.SelectedIndex = 1;
        }

        private void bValeConsulta_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmValeConsulta>();
        }

        private void bCCAlta_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmCCAlta>();
        }

        private void bCCConsulta_ItemClick(object sender, EventArgs e)
        {
            FormsFactory.ShowForm<frmCCConsulta>();
        }

        private void SalirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void tmrVencimiento_Tick(object sender, EventArgs e)
        {
            Stock.EjecutarVencimientos();
            lblCtrlVto.Text = DateTime.Now.ToString();
        }

        private void lblCtrlVto_Click(object sender, EventArgs e)
        {
            Stock.EjecutarVencimientos();
            lblCtrlVto.Text = DateTime.Now.ToString();
        }

        private void bVBTest_ItemClick(object sender, EventArgs e)
        {
            frmTest f = new frmTest();
            f.MdiParent = this;
            f.Show();
        }
    }
}
